iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 11
0
自我挑戰組

OS作業系統學習系列 第 11

第十一天 Process Synchronization(同步)--上

  • 分享至 

  • xImage
  •  

第十一天 Process Synchronization(同步)--上

我們先來說說為什麼要同步的背景吧!

先來說個小故事,假設有張提款卡可以兩個人用,有一天他們兩個同時去存錢跟提款,這時如果資料不同步就會有很大的問題。所以兩個process可能會同時間進行,那他就有可能隨時會被中斷掉,導致共享的資料可能會前後不一,所以如果有同步的話,就可以確保資料不會出錯。像之前說過的consumer-producer也會有同步的問題,因為他們共用buffer。

以上的狀況就稱做為race condition(2個process同時執行),下面有圖能顯示得更清楚:
https://ithelp.ithome.com.tw/upload/images/20181026/20112132JFaHFXtmEP.png
可以看到counter++最後算完的counter,被counter--的counter給取代了。

那多個process同時執行就會有critical section的問題存在。
每個process都有一段程式碼,要作為更改數據使用就會被放在critical section裡,當有process要進去時,其他的process就不能進去,而critical section problem就是為了設計protocol來解決。當process要進去時,要先經過entry section的同意,出來時也要經過exit section。要解決critical section problem要滿足三個條件:

  1. Mutual Exclusion(互斥):有process在critical section裡面就不可以進去。
  2. Progress(前進):critical section裡面沒有process時,要能放下一個process進去。
  3. Bounded Waiting(有限等待):process不能一直佔著不出來,雖然執行時間沒有限定,但就是要出來。

Critical section在作業系統的kernel中,可以設計成:

  • Preemptive:能有效率地換process,執行起來會更好
  • Non-preemptive:一個一個跑,不會互相起衝突

明天我們來說說解決critical section problem的辦法!


上一篇
第十天 CPU Scheduling--下
下一篇
第十二天 Process Synchronization(同步)--中
系列文
OS作業系統學習30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言